﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RaisingStudio.Data.Linq
{
    public static class IQueryableDataExtension
    {
        public static IEnumerable<T> Query<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.Query<T>(queryableData);
        }

        public static IEnumerable<T> Query<T>(this IQueryableData queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.Query<T>(queryableData, startRecord, maxRecords);
        }

        public static List<T> QueryForList<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.QueryForList<T>(queryableData);
        }

        public static List<T> QueryForList<T>(this IQueryableData queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.QueryForList<T>(queryableData, startRecord, maxRecords);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.QueryForDataTable<T>(queryableData);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IQueryableData queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.QueryForDataTable<T>(queryableData, startRecord, maxRecords);
        }


        public static int GetCount<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetCount<T>(queryableData);
        }

        public static object GetSum<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetSum<T>(queryableData);
        }

        public static object GetAvg<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetAvg<T>(queryableData);
        }

        public static object GetMax<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetMax<T>(queryableData);
        }

        public static object GetMin<T>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetMin<T>(queryableData);
        }

        public static S GetSum<T, S>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetSum<T, S>(queryableData);
        }

        public static S GetAvg<T, S>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetAvg<T, S>(queryableData);
        }

        public static S GetMax<T, S>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetMax<T, S>(queryableData);
        }

        public static S GetMin<T, S>(this IQueryableData queryableData)
        {
            return queryableData.DataContext.GetMin<T, S>(queryableData);
        }

        public static T GetData<T>(this IQueryableData queryableData)
        {
            return DataContextExtension.QueryForSingle<T>(queryableData.DataContext, queryableData);
        }

        public static T QueryForSingle<T>(this IQueryableData queryableData)
        {
            return DataContextExtension.QueryForSingle<T>(queryableData.DataContext, queryableData);
        }


        public static int Delete<T>(this IQueryableData queryableData)
        {
            return DeleteByQuery<T>(queryableData);
        }
        public static int DeleteByQuery<T>(this IQueryableData queryableData)
        {
            return DataContextExtension.DeleteByQuery<T>(queryableData.DataContext, queryableData);
        }

        public static bool Exists<T>(this IQueryableData queryableData)
        {
            return ExistsByQuery<T>(queryableData);
        }
        public static bool ExistsByQuery<T>(this IQueryableData queryableData)
        {
            return DataContextExtension.ExistsByQuery<T>(queryableData.DataContext, queryableData);
        }

        public static int Update<T>(this IQueryableData queryableData, T dataObject)
        {
            return UpdateByQuery<T>(queryableData, dataObject);
        }
        public static int UpdateByQuery<T>(this IQueryableData queryableData, T dataObject)
        {
            return queryableData.DataContext.UpdateByQuery<T>(dataObject, queryableData);
        }




        public static IEnumerable<T> Query<T>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.Query<T>(queryableData);
        }

        public static IEnumerable<T> Query<T>(this IQueryableData<T> queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.Query<T>(queryableData, startRecord, maxRecords);
        }

        public static List<T> QueryForList<T>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.QueryForList<T>(queryableData);
        }

        public static List<T> QueryForList<T>(this IQueryableData<T> queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.QueryForList<T>(queryableData, startRecord, maxRecords);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.QueryForDataTable<T>(queryableData);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IQueryableData<T> queryableData, int startRecord, int maxRecords)
        {
            return queryableData.DataContext.QueryForDataTable<T>(queryableData, startRecord, maxRecords);
        }


        public static int GetCount<T>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.GetCount<T>(queryableData);
        }

        public static S GetSum<T, S>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.GetSum<T, S>(queryableData);
        }

        public static S GetAvg<T, S>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.GetAvg<T, S>(queryableData);
        }

        public static S GetMax<T, S>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.GetMax<T, S>(queryableData);
        }

        public static S GetMin<T, S>(this IQueryableData<T> queryableData)
        {
            return queryableData.DataContext.GetMin<T, S>(queryableData);
        }


        public static T GetData<T>(this IQueryableData<T> queryableData)
        {
            return DataContextExtension.QueryForSingle<T>(queryableData.DataContext, queryableData);
        }

        public static T QueryForSingle<T>(this IQueryableData<T> queryableData)
        {
            return DataContextExtension.QueryForSingle<T>(queryableData.DataContext, queryableData);
        }


        public static int Delete<T>(this IQueryableData<T> queryableData)
        {
            return DeleteByQuery<T>(queryableData);
        }
        public static int DeleteByQuery<T>(this IQueryableData<T> queryableData)
        {
            return DataContextExtension.DeleteByQuery<T>(queryableData.DataContext, queryableData);
        }

        public static bool Exists<T>(this IQueryableData<T> queryableData)
        {
            return ExistsByQuery<T>(queryableData);
        }
        public static bool ExistsByQuery<T>(this IQueryableData<T> queryableData)
        {
            return DataContextExtension.ExistsByQuery<T>(queryableData.DataContext, queryableData);
        }

        public static int Update<T>(this IQueryableData<T> queryableData, T dataObject)
        {
            return UpdateByQuery<T>(queryableData, dataObject);
        }
        public static int UpdateByQuery<T>(this IQueryableData<T> queryableData, T dataObject)
        {
            return queryableData.DataContext.UpdateByQuery<T>(dataObject, queryableData);
        }
    }
}
